//
//  CZEmoticonTools.swift
//  Weibo27
//
//  Created by apple on 16/4/25.
//  Copyright © 2016年 itcast. All rights reserved.
//

import UIKit

// 最多显示的列数
let CZEmoticonMaxCol = 7
// 最多显示的行数
let CZEmoticonMaxRow = 3
// 最多显示的表情个数
let CZEmoticonMaxCount = CZEmoticonMaxCol * CZEmoticonMaxRow - 1


class CZEmoticonTools: NSObject {
    
    // 全局访问点
    static let sharedTools:CZEmoticonTools = CZEmoticonTools()
    
    // 读取表情bundle文件
    lazy var emoticonBundle: NSBundle = {
        let path = NSBundle.mainBundle().pathForResource("Emoticons.bundle", ofType: nil)!
        return NSBundle(path: path)!
    }()
    
    // 默认表情
    lazy var defaultEmoticon:[CZEmoticon] = {
       return self.getEmoticons("default/")
    }()
    
    // Emoji表情
    lazy var emojiEmoticon:[CZEmoticon] = {
        return self.getEmoticons("emoji/")
    }()
    
    // 浪小花表情
    lazy var lxhEmoticon:[CZEmoticon] = {
        return self.getEmoticons("lxh/")
    }()
    
    
    // emoticon三维表情数组
    lazy var allEmoticons: [[[CZEmoticon]]] = {
        return [
            self.getEmoticonGroup(self.defaultEmoticon),
            self.getEmoticonGroup(self.emojiEmoticon),
            self.getEmoticonGroup(self.lxhEmoticon)]
    }()
    
    func demo(){
        
        
        
     //   self.getEmoticonGroup(self.defaultEmoticon)
        
        
        
    }
    // 把一维数组截取成二维数组
    func getEmoticonGroup(emoticon: [CZEmoticon]) -> [[CZEmoticon]]{
        /*
            loc 0  19
            loc 20 39
        
            loc
        */
        // 计算我们的表情有多少页
        let pageCount = (emoticon.count + CZEmoticonMaxCount - 1) / CZEmoticonMaxCount
        // 定义一个临时数组保存一维数组数据
        var tempArray: [[CZEmoticon]] = [[CZEmoticon]]()
        for index in 0..<pageCount{
            // 位置(100)
            let loc = index * CZEmoticonMaxCount
            // 长度
            var len = CZEmoticonMaxCount
            // 因为我们的默认表情有108个 会越界
            if loc + len > emoticon.count{
                len = emoticon.count - loc
            }
            // range
            let range = NSMakeRange(loc, len)
            // 截取数组
            let emoticons =  (emoticon as NSArray).subarrayWithRange(range) as! [CZEmoticon]
            // 添加一维数组
            tempArray.append(emoticons)
        }
        return tempArray
    }
    
    
    // 获取表情模型一维数组
    func getEmoticons(path: String) -> [CZEmoticon]{
        let file = emoticonBundle.pathForResource("\(path)info.plist", ofType: nil)!
        // 通过路径得到plist文件的数组
        let array = NSArray(contentsOfFile: file)!
        // 定义一个临时数组保存我们的模型数据
        var tempArray: [CZEmoticon] = [CZEmoticon]()
        
        //  遍历数组 字典转模型
        for dic  in array{
            // 字典转模型
            let emoticon = CZEmoticon(dict: dic as! [String: AnyObject])
            
            // 设置全路径
            emoticon.path = path
            // 把模型添加到数组中
            tempArray.append(emoticon)
        }
        
        return tempArray
    }
    // MARK: -  供外界调用判断chs 是否和我们本地的相同  -- > 返回对象的emoticon
    func getEmoticonWithChs(chs: String) -> CZEmoticon?{
        // 判断我们传进来的图片描述是否包含在我们默认表情中
        for emoticon in defaultEmoticon{
            if emoticon.chs == chs{
                return emoticon
            }
        }
        // 判断我们传进来的图片描述是否包含在我们浪小花表情中
        for emoticon in lxhEmoticon{
            if emoticon.chs == chs{
                return emoticon
            }
        }
        // 如果找不到对象的chs  就返回一个nil
        return nil
        
    }

}
